/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.lestr.otaf.editeur;

import java.awt.event.ActionEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import javax.swing.Action;
import org.lestr.astenn.PluginsManager;
import org.lestr.otaf.EcouteurErreursOTAF;
import org.lestr.otaf.EcouteurErreursOTAF.ErreurOTAF;
import org.lestr.otaf.Executeur;
import org.netbeans.api.project.Project;
import org.openide.util.Exceptions;
import org.openide.util.Utilities;
import org.openide.windows.IOProvider;
import org.openide.windows.InputOutput;
import org.openide.windows.OutputWriter;

/**
 *
 * @author pibonnin
 */
public class ActionExecuter implements Action {


    private boolean enabled;


    private Map<String, Object> valeurs;


    public ActionExecuter() {
        enabled = true;
        valeurs = new HashMap<String, Object>();

        valeurs.put(Action.NAME, "Exécuter");

    }


    public Object getValue(String key) {
        return valeurs.get(key);
    }


    public void putValue(String key,
                         Object value) {
        valeurs.put(key, value);
    }


    public void setEnabled(boolean b) {
        enabled = b;
    }


    public boolean isEnabled() {

        Project proj = Utilities.actionsGlobalContext().lookup(Project.class);
        return enabled && new File(proj.getProjectDirectory().getPath() + "/src/defaut.otaf").exists();

    }


    public void addPropertyChangeListener(PropertyChangeListener listener) {
    }


    public void removePropertyChangeListener(PropertyChangeListener listener) {
    }


    public void actionPerformed(ActionEvent e) {

        PluginsManager.getSingleton();
        Project proj = Utilities.actionsGlobalContext().lookup(Project.class);

        try {
            executer(new URL("file:///" + proj.getProjectDirectory().getPath() + "/src/defaut.otaf"), null);
        } catch (MalformedURLException ex) {
            Exceptions.printStackTrace(ex);
        }

    }


    public static void executer(URL url,
                                File repertoireCourant) {

        final InputOutput io = IOProvider.getDefault().getIO("OTAF", false);
        Executeur executeur = new Executeur();

        executeur.setEcouteurErreursOTAF(new EcouteurErreursOTAF() {


            public void nouvelleErreur(ErreurOTAF eotaf) {

                io.select();

                OutputWriter out = io.getOut();

                String msg = "ERREUR OTAF ! " + "\n"
                             + "   fichier : " + (eotaf.getFichier() != null ? eotaf.getFichier().toString() : "") + "\n"
                             + "   ligne : " + eotaf.getLigne() + "\n"
                             + "   colonne : " + eotaf.getColonne() + "\n"
                             + "   message : " + eotaf.getMessage() + "\n";

                out.println(msg);

            }// FIN Méthode nouvelleErreur


        });

        if (repertoireCourant != null)
            executeur.setRepertoireCourant(repertoireCourant);

        executeur.executer(url);

    }// FIN Méthode executer


}// FIN Classe ActionExecuter


